home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / etc / gdm / failsafeDexconf < prev    next >
Text File  |  2009-03-17  |  9KB  |  310 lines

  1. #!/bin/sh
  2.  
  3. # dexconf: Debian X server configuration file writer for failsafe mode
  4. #
  5. # This tool is a backend which uses debconf database values.  It writes an
  6. # XFree86 X server configuration file based on the information in the database.
  7. #
  8. # This script is derived from the dexconf program, written by
  9. # Branden Robinson
  10.  
  11. # Copyright 2007--2008 Canonical, Ltd.
  12. # Copyright 2000--2004 Progeny Linux Systems, Inc.
  13. #
  14. # This is free software; you may redistribute it and/or modify
  15. # it under the terms of the GNU General Public License as
  16. # published by the Free Software Foundation; either version 2,
  17. # or (at your option) any later version.
  18. #
  19. # This is distributed in the hope that it will be useful, but
  20. # WITHOUT ANY WARRANTY; without even the implied warranty of
  21. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22. # GNU General Public License for more details.
  23. #
  24. # You should have received a copy of the GNU General Public License with
  25. # the Debian operating system, in /usr/share/common-licenses/GPL;  if
  26. # not, write to the Free Software Foundation, Inc., 59 Temple Place,
  27. # Suite 330, Boston, MA 02111-1307 USA
  28.  
  29. set -e
  30.  
  31. # source debconf library
  32. . /usr/share/debconf/confmodule
  33.  
  34. # display a usage message
  35. usage () {
  36.   cat <<EOF
  37. Usage: $PROGNAME [OPTION ...]
  38.   write an Xorg X server configuration file based on debconf database values
  39. Options:
  40.   -h, --help                                 display this usage message and exit
  41.   -o FILE, --output=FILE                        write configuration file to FILE
  42. This help message is intended only as a quick reference.  For a description of
  43. the usage of $PROGNAME, see the $PROGNAME(1) manual page.
  44. EOF
  45. }
  46.  
  47. # the error-out function
  48. bomb () {
  49.   echo "$PROGNAME: error: $*" | fold -s -w "${COLUMNS:-80}" >&2
  50.   exit 1
  51. }
  52.  
  53. # wrapper around db_get to ensure that the info we try to retrieve exists; it
  54. # is (almost) always a fatal error for the values to be null
  55. fetch () {
  56.   db_get "$1" || true
  57.   if [ -z "$RET" ]; then
  58.     ERRMSG="cannot generate configuration file; $1 not set.  Aborting."
  59.     ERRMSG="$ERRMSG  Reconfigure the X server with \"dpkg-reconfigure"
  60.     ERRMSG="$ERRMSG xserver-xorg\" to correct this problem."
  61.     bomb "$ERRMSG"
  62.   fi
  63. }
  64.  
  65. # convert a debconf comma-delimited list to a shell whitespace-delimited list
  66. list_convert () {
  67.   echo $(IFS=", "; set -- $RET; while [ $# -gt 0 ]; do echo \"$1\"; shift; done)
  68. }
  69.  
  70. SERVER="xorg"
  71. XF86CONFIG=/etc/X11/xorg.conf.failsafe
  72. PROGNAME=${0##*/}
  73. SHOWHELP=
  74. EARLYEXIT=
  75.  
  76. GETOPT_OUTPUT=$(getopt --options ho: \
  77.                        --longoptions help,output: \
  78.                        -n "$PROGNAME" -- "$@")
  79.  
  80. if [ $? -ne 0 ]; then
  81.     bomb "error while getting options; use \"$PROGNAME --help\" for help"
  82. fi
  83.  
  84. eval set -- "$GETOPT_OUTPUT"
  85.  
  86. while :; do
  87.     case "$1" in
  88.         -f|--format)
  89.           bomb "This option, and XFree86 3.x output, are no longer supported."
  90.           ;;
  91.         -h|--help) SHOWHELP=yes EARLYEXIT=yes ;;
  92.         -o|--output) XF86CONFIG="$2"; shift ;;
  93.         --) shift; break ;;
  94.         *)
  95.           bomb "unrecognized option \"$1\"; use \"$PROGNAME --help\" for help"
  96.           ;;
  97.     esac
  98.     shift
  99. done
  100.  
  101. if [ -n "$SHOWHELP" ]; then
  102.     usage
  103. fi
  104.  
  105. if [ -n "$EARLYEXIT" ]; then
  106.     exit 0
  107. fi
  108.  
  109. DEXCONFTMPDIR=
  110.  
  111. trap 'if [ -e "$DEXCONFTMPDIR/backup" ] && [ -n "$XF86CONFIG" ]; then \
  112.         cat "$DEXCONFTMPDIR/backup" >"$XF86CONFIG"; \
  113.       fi; \
  114.       exec 4<&-; \
  115.       rm -rf "$DEXCONFTMPDIR"; \
  116.       bomb "received signal; aborting"' HUP INT QUIT TERM
  117.  
  118.  
  119. # Set up a temporary directory for the files we'll be writing.
  120. TDIR_PARENT="${TMPDIR:-/tmp}"
  121. TDIR="${TMPDIR:-/tmp}/dexconf-tmp-$$"
  122.  
  123. if [ ! -d "$TDIR_PARENT" ]; then
  124.   bomb "cannot create temporary work directory; \"$TDIR_PARENT\" does not" \
  125.     "exist or is not a directory"
  126. fi
  127.  
  128. if [ ! -w "$TDIR_PARENT" ]; then
  129.   bomb "cannot create temporary work directory in \"$TDIR_PARENT\"; directory" \
  130.     "not writable"
  131. fi
  132.  
  133. rm -rf "$TDIR"
  134.  
  135. if mkdir -m 0700 "$TDIR"; then
  136.   DEXCONFTMPDIR="$TDIR"
  137. else
  138.   bomb "creation of temporary work directory \"$TDIR\" failed"
  139. fi
  140.  
  141. # xorg.conf sections:
  142. #   Files          File pathnames
  143. #   ServerFlags    Server flags                      NOT USED BY DEXCONF
  144. #   Module         Dynamic module loading            NOT USED BY DEXCONF
  145. #   InputDevice    Input device description
  146. #   Device         Graphics device description
  147. #   VideoAdaptor   Xv video adaptor description      NOT USED BY DEXCONF
  148. #   Monitor        Monitor description
  149. #   Modes          Video modes descriptions          NOT USED BY DEXCONF
  150. #   Screen         Screen configuration
  151. #   ServerLayout   Overall layout                    NOT USED BY DEXCONF
  152. #   DRI            DRI-specific configuration        NOT USED BY DEXCONF
  153. #   Vendor         Vendor-specific configuration     NOT USED BY DEXCONF
  154.  
  155. ### HEADER
  156.  
  157. # Because debconf hijacks standard output and its confmodule uses file
  158. # descriptor 3 for its own purposes, we will write our output to file descriptor
  159. # 4 instead of standard output.
  160.  
  161. exec 4>"$DEXCONFTMPDIR/Header"
  162. cat >&4 <<SECTION
  163. # xorg.conf.failsafe (X.Org X Window System server configuration file)
  164. #
  165. # This file was generated by dexconf, the Debian X Configuration tool, using
  166. # values from the debconf database.
  167. #
  168. # Edit this file with caution, and see the xorg.conf manual page.
  169. # (Type "man xorg.conf" at the shell prompt.)
  170. #
  171. # This file is automatically updated on xserver-xorg package upgrades *only*
  172. # if it has not been modified since the last upgrade of the xserver-xorg
  173. # package.
  174. #
  175. # If you have edited this file but would like it to be automatically updated
  176. # again, run the following command:
  177. #   sudo dpkg-reconfigure -phigh xserver-xorg
  178. SECTION
  179.  
  180. ### DEVICE
  181.  
  182. db_get xserver-$SERVER/config/device/driver
  183. DEVICE_DRIVER="$RET"
  184. db_get xserver-$SERVER/config/device/bus_id
  185. DEVICE_BUSID="$RET"
  186. db_get xserver-$SERVER/config/device/use_fbdev
  187. DEVICE_USE_FBDEV="$RET"
  188.  
  189. # Override device driver
  190. DEVICE_DRIVER=${1:-"vesa"}
  191.  
  192. QEMU_KVM=$(grep "QEMU Virtual CPU" /proc/cpuinfo || true)
  193. if [ -n "$QEMU_KVM" ]; then
  194.     DEVICE_DRIVER="cirrus"
  195. fi
  196. VBOX_VIDEO=$(grep -e "^vbox " /proc/modules || true)
  197. if [ -n "$VBOX_VIDEO" ]; then
  198.     DEVICE_DRIVER="vboxvideo"
  199. fi
  200.  
  201. exec 4>"$DEXCONFTMPDIR/Device"
  202. cat >&4 <<SECTION
  203. Section "Device"
  204.     Identifier    "Configured Video Device"
  205. SECTION
  206. if [ -n "$DEVICE_DRIVER" ]; then
  207.   printf "\tDriver\t\t\"$DEVICE_DRIVER\"\n" >&4
  208. fi
  209. PS3_FB=$(grep -i PS3 /proc/fb 2>/dev/null || true)
  210. if [ -n "$PS3_FB" ]; then
  211.   printf "\tOption\t\t\"ShadowFB\"\t\t\"false\"\n" >&4
  212. fi
  213. if [ -n "$DEVICE_BUSID" ]; then
  214.   printf "\tBusID\t\t\"$DEVICE_BUSID\"\n" >&4
  215. fi
  216. if [ "$DEVICE_USE_FBDEV" = "true" ]; then
  217.   printf "\tOption\t\t\"UseFBDev\"\t\t\"$DEVICE_USE_FBDEV\"\n" >&4
  218. fi
  219. printf "EndSection\n" >&4
  220.  
  221. ### MONITOR
  222.  
  223. exec 4>"$DEXCONFTMPDIR/Monitor"
  224. cat >&4 <<SECTION
  225. Section "Monitor"
  226.     Identifier    "Configured Monitor"
  227. SECTION
  228.  
  229. if [ -n "$QEMU_KVM" ]; then
  230.   printf "\tHorizSync\t30-70\n" >&4
  231.   printf "\tVertRefresh\t50-160\n" >&4
  232. fi
  233. cat >&4 <<SECTION
  234. EndSection
  235. SECTION
  236.  
  237. ### SCREEN
  238.  
  239. exec 4>"$DEXCONFTMPDIR/Screen"
  240. cat >&4 <<SECTION
  241. Section "Screen"
  242.     Identifier    "Default Screen"
  243.     Monitor        "Configured Monitor"
  244.     Device        "Configured Video Device"
  245. SECTION
  246. if [ -n "$PS3_FB" ]; then
  247.   printf "\tDefaultFbBpp 32\n" >&4
  248. fi
  249. if [ -n "$QEMU_KVM" ]; then
  250. cat >&4 <<SUBSECTION
  251.     DefaultDepth    24
  252.     SubSection "Display"
  253.         Depth    24
  254.         Modes    "1280x800" "1152x768" "1024x768" "800x600" "640x480"
  255.     EndSubSection
  256. SUBSECTION
  257. fi
  258. printf "EndSection\n" >&4
  259.  
  260. # Close file descriptor 4 before we delete temporary files
  261. exec 4<&-
  262.  
  263. # Tell debconf to stop listening to us.
  264. db_stop
  265.  
  266. # Write the configuration file.  Put a blank line before every section we write
  267. # except the first.
  268.  
  269. OUTFILE="$DEXCONFTMPDIR/dexconf-out"
  270. umask 022
  271. : >"$OUTFILE"
  272.  
  273. SPACER=
  274. for SECTION in Header Files InputDeviceKeyboard InputDeviceMouse \
  275.                Device Monitor Screen; do
  276.   if [ -e "$DEXCONFTMPDIR/$SECTION" ]; then
  277.     eval $SPACER
  278.     cat "$DEXCONFTMPDIR/$SECTION" >>"$OUTFILE"
  279.     SPACER='echo "" >>"$OUTFILE"'
  280.   fi
  281. done
  282.  
  283. # Ensure we can write to our destination if it already exits.
  284. if [ -e "$XF86CONFIG" ]; then
  285.   if [ ! -w "$XF86CONFIG" ]; then
  286.     bomb "unable to write to \"$XF86CONFIG\""
  287.   fi
  288. fi
  289.  
  290. BACKUP=
  291. # Create a backup of the existing configuration file if it already exists.
  292. if [ -e "$XF86CONFIG" ]; then
  293.   cat "$XF86CONFIG" >"$DEXCONFTMPDIR/backup"
  294.   BACKUP=true
  295. fi
  296.  
  297. # Move the new file into place.
  298. if ! cat "$OUTFILE" >"$XF86CONFIG"; then
  299.   # Failed; try to restore the backup.
  300.   if [ -n "$BACKUP" ]; then
  301.     cat "$DEXCONFTMPDIR/backup" >"$XF86CONFIG"
  302.   fi
  303. fi
  304.  
  305. rm -rf "$DEXCONFTMPDIR"
  306.  
  307. exit 0
  308.  
  309. # vim:set ai et sts=2 sw=2 tw=80:
  310.